package com.platform.service.impl;

import com.platform.common.util.DateUtil;
import com.platform.common.util.StringUtil;
import com.platform.dao.UserDao;
import com.platform.domain.TbSysUser;
import com.platform.domain.TbSysUserAuthorization;
import com.platform.domain.query.TbSysUserQuery;
import com.platform.service.UserService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * User: wangyanginfo
 * Date: 12-8-29
 * Time: 下午7:30
 * To change this template use File | Settings | File Templates.
 */
@Service("userService")
public class UserServiceImpl implements UserService {

    @Resource
    private UserDao userDao;

    /**
     * 根据用户登录名查询用户信息
     *
     * @param loginId 登录名
     * @return 用户信息
     * @throws Exception
     */
    @Override
    public TbSysUser queryUserByLoginId(String loginId) throws Exception {
        return userDao.queryUserByLoginId(loginId);
    }

    /**
     * 根据用户对象条件查询符合条件的用户记录总条数
     *
     * @param user 用户对象
     * @return 记录总条数
     * @throws Exception
     */
    @Override
    public int queryUserInfosCount(TbSysUserQuery user) throws Exception {
        return userDao.queryUserInfosCount(user);
    }

    /**
     * 根据用户登录名查询用户信息
     *
     * @param user 用户查询条件
     * @return 用户信息
     * @throws Exception
     */
    @Override
    public List<TbSysUser> queryUserInfos(TbSysUserQuery user) throws Exception {
        return userDao.queryUserInfos(user);
    }

    /**
     * 根据用户ID查询用户信息
     *
     * @param userId 用户ID
     * @return 用户信息
     * @throws Exception
     */
    @Override
    public TbSysUser queryUser(String userId) throws Exception {
        return userDao.queryUser(userId);
    }

    /**
     * 插入用户信息
     *
     * @param user 用户信息
     * @return 执行结果
     * @throws Exception
     */
    @Override
    public int insertUser(TbSysUser user) throws Exception {
        user.setUserId(StringUtil.getUUID());
        user.setPassword("123456");
        user.setDeltag("0");
        user.setCreateTime(DateUtil.toDayString(DateUtil.YYYY_MM_DD_24H_MM_SS));
        return userDao.insertUser(user);
    }

    /**
     * 更新用户信息
     *
     * @param user 用户信息
     * @return 执行结果
     * @throws Exception
     */
    @Override
    public int updateUser(TbSysUser user) throws Exception {
        user.setUpdateTime(DateUtil.toDayString(DateUtil.YYYY_MM_DD_24H_MM_SS));
        String roleId = user.getRoleId();
        // 查询用户修改前的默认角色
        TbSysUserAuthorization userAuth_before = queryUserDefaultRole(user.getUserId());
        // 如果用户选择默认角色为空或者与原来默认角色不相同时，更改用户之前的默认角色
        if (StringUtil.isBlank(roleId) || !userAuth_before.getRoleId().equals(roleId)) {
            userAuth_before.setDefaultRoleSign("0");
            userAuth_before.setCreateTime(DateUtil.toDayString(DateUtil.YYYY_MM_DD_24H_MM_SS));
            userDao.updateUserAuthorization(userAuth_before);
        }
        // 判断是否设置了默认角色，如果有则进行查询并保存
        if (StringUtil.isNotBlank(roleId)) {
            TbSysUserAuthorization userAuth_Cond = new TbSysUserAuthorization();
            userAuth_Cond.setUserId(user.getUserId());
            userAuth_Cond.setRoleId(user.getRoleId());
            List<TbSysUserAuthorization> userAuth_list = userDao.queryUserAuthorization(userAuth_Cond);
            if (userAuth_list != null && userAuth_list.size() == 1) {
                TbSysUserAuthorization userAuth_after = userAuth_list.get(0);
                userAuth_after.setDefaultRoleSign("1");
                userAuth_after.setCreateTime(DateUtil.toDayString(DateUtil.YYYY_MM_DD_24H_MM_SS));
                userDao.updateUserAuthorization(userAuth_after);
            }
        }
        return userDao.updateUser(user);
    }

    /**
     * 根据用户ID删除用户信息
     *
     * @param userId 用户ID
     * @return 执行结果
     * @throws Exception
     */
    @Override
    public int deleteUser(String userId) throws Exception {
        TbSysUser user = new TbSysUser();
        user.setUserId(userId);
        user.setDeleteTime(DateUtil.toDayString(DateUtil.YYYY_MM_DD_24H_MM_SS));
        user.setEnabled("0"); // 无效
        user.setDeltag("1"); // 删除标志
        return userDao.updateUser(user);
    }

    /**
     * 保存用户ID授权信息
     *
     * @param userAuths
     * @return
     * @throws Exception
     */
    @Override
    public int saveUserRoles(List<TbSysUserAuthorization> userAuths) throws Exception {
        // 删除用户以前的授权信息
        String userId = userAuths.get(0).getUserId();
        // 查询用户修改前的默认角色
        TbSysUserAuthorization userAuth_before = queryUserDefaultRole(userId);
        userDao.deleteUserAuthorizationByUserId(userId);
        int i = 0;
        // 插入新的授权信息
        for (TbSysUserAuthorization userAuth : userAuths) {
            // 保存用户授权
            userAuth.setCreateTime(DateUtil.toDayString(DateUtil.YYYY_MM_DD_24H_MM_SS));
            if (userAuth_before != null && userAuth.getRoleId().equals(userAuth_before.getRoleId())) {
                userAuth.setDefaultRoleSign("1");
            } else {
                userAuth.setDefaultRoleSign("0");
            }
            i += userDao.insertUserAuthorization(userAuth);
        }
        return i;
    }

    /**
     * 查询用户默认角色关系
     *
     * @param userId 用户ID
     * @return
     * @throws Exception
     */
    private TbSysUserAuthorization queryUserDefaultRole(String userId) throws Exception {
        TbSysUserAuthorization userAuth = null;
        TbSysUserAuthorization userAuth_Cond = new TbSysUserAuthorization();
        userAuth_Cond.setUserId(userId);
        userAuth_Cond.setDefaultRoleSign("1");
        List<TbSysUserAuthorization> userAuth_list = userDao.queryUserAuthorization(userAuth_Cond);
        if (userAuth_list != null && userAuth_list.size() == 1) {
            userAuth = userAuth_list.get(0);
        }
        return userAuth;
    }
}
